libotutil: Add API to create an "ay" GVariant from GBytes
authorColin Walters <walters@verbum.org>
Wed, 14 Aug 2013 22:20:02 +0000 (18:20 -0400)
committerColin Walters <walters@verbum.org>
Wed, 14 Aug 2013 23:23:33 +0000 (19:23 -0400)
We used to have a version of this, but since I'm trying to use
GBytes more, this became a more common operation, and it's annoying
to type out the whole G_VARIANT_TYPE ("ay") each time, and pass
TRUE for trusted.

https://bugzilla.gnome.org/show_bug.cgi?id=706031

src/libostree/ostree-core.c
src/libotutil/ot-variant-utils.c
src/libotutil/ot-variant-utils.h

index 8dc2b9606219be3eaf9a7fe9dfcb30d1071cde06..f1e1fc97f4a477b5bf9d3ebc3a6fb5c7d578aad5 100644 (file)
@@ -182,6 +182,7 @@ read_xattr_name_array (const char *path,
     {
       ssize_t bytes_read;
       char *buf;
+      gs_unref_bytes GBytes *bytes = NULL;
 
       bytes_read = lgetxattr (path, p, NULL, 0);
       if (bytes_read < 0)
@@ -194,18 +195,17 @@ read_xattr_name_array (const char *path,
         continue;
 
       buf = g_malloc (bytes_read);
+      bytes = g_bytes_new_take (buf, bytes_read);
       if (lgetxattr (path, p, buf, bytes_read) < 0)
         {
           ot_util_set_error_from_errno (error, errno);
           g_prefix_error (error, "lgetxattr (%s, %s) failed: ", path, p);
-          g_free (buf);
           goto out;
         }
       
       g_variant_builder_add (builder, "(@ay@ay)",
                              g_variant_new_bytestring (p),
-                             g_variant_new_from_data (G_VARIANT_TYPE ("ay"),
-                                                      buf, bytes_read, FALSE, g_free, buf));
+                             ot_gvariant_new_ay_bytes (bytes));
 
       p = p + strlen (p) + 1;
     }
index 4255a1027de41ff67834ba5d465833f95aa0a3fd..0f2e57dbc12685877cc5103dd5f2e9536e7f3cd4 100644 (file)
@@ -41,6 +41,12 @@ ot_gvariant_new_bytearray (const guchar   *data,
   return ret;
 }
 
+GVariant *
+ot_gvariant_new_ay_bytes (GBytes *bytes)
+{
+  return g_variant_new_from_bytes (G_VARIANT_TYPE ("ay"), bytes, TRUE);
+}
+
 GHashTable *
 ot_util_variant_asv_to_hash_table (GVariant *variant)
 {
index e8f8f5ff51ddcb9ccb1a03c850fa4f156ece90e6..83a3f54096281549db802c2a4e57d7ede991f724 100644 (file)
@@ -29,6 +29,8 @@ G_BEGIN_DECLS
 GVariant *ot_gvariant_new_bytearray (const guchar   *data,
                                      gsize           len);
 
+GVariant *ot_gvariant_new_ay_bytes (GBytes *bytes);
+
 GHashTable *ot_util_variant_asv_to_hash_table (GVariant *variant);
 
 GVariant * ot_util_variant_take_ref (GVariant *variant);